package com.carloha.finance.tool;

import java.io.IOException;
 
/**
 * 文件类型判断类
 */
public final class FileTypeJudge {
 
	/**
	 * Constructor
	 */
	private FileTypeJudge() {
	}
 
	/**
	 * 将文件头转换成16进制字符串
	 * 
	 * @param 原生byte
	 * @return 16进制字符串
	 */
	private static String bytesToHexString(byte[] src) {
 
		StringBuilder stringBuilder = new StringBuilder();
		if (src == null || src.length <= 0) {
			return null;
		}
		for (int i = 0; i < src.length; i++) {
			int v = src[i] & 0xFF;
			String hv = Integer.toHexString(v);
			if (hv.length() < 2) {
				stringBuilder.append(0);
			}
			stringBuilder.append(hv);
		}
		return stringBuilder.toString();
	}
 
	/**
	 * 得到文件头
	 * 
	 * @param filePath
	 *            文件路径
	 * @return 文件头
	 * @throws IOException
	 */
	private static String getFileContent(byte[] fileBytes) throws IOException {	
		byte[] fileTypeByte = new byte[28]; 		 
		System.arraycopy(fileBytes, 0, fileTypeByte, 0, fileTypeByte.length);		
		return bytesToHexString(fileTypeByte);
	}
 
	/**
	 * 判断文件类型
	 * 
	 * @param filePath
	 *            文件路径
	 * @return 文件类型
	 */
	public static FileType getType(byte[] fileBytes) throws IOException {
 
		String fileHead = getFileContent(fileBytes);
 
		if (fileHead == null || fileHead.length() == 0) {
			return null;
		}
 
		fileHead = fileHead.toUpperCase();
 
		FileType[] fileTypes = FileType.values();
 
		for (FileType type : fileTypes) {
			if (fileHead.startsWith(type.getValue())) {
				return type;
			}
		}
 
		return null;
	}
 
	public static Integer isFileType(FileType value) {
		Integer type = 7;// 其他
		// 图片
		FileType[] pics = { FileType.JPEG, FileType.PNG, FileType.GIF, FileType.TIFF, FileType.BMP, FileType.DWG, FileType.PSD };
 
		FileType[] docs = { FileType.RTF, FileType.XML, FileType.HTML, FileType.CSS, FileType.JS, FileType.EML, FileType.DBX, FileType.PST, FileType.XLS_DOC, FileType.XLSX_DOCX, FileType.VSD,
				FileType.MDB, FileType.WPS, FileType.WPD, FileType.EPS, FileType.PDF, FileType.QDF, FileType.PWL, FileType.ZIP, FileType.RAR, FileType.JSP, FileType.JAVA, FileType.CLASS,
				FileType.JAR, FileType.MF, FileType.EXE, FileType.CHM };
 
		FileType[] videos = { FileType.AVI, FileType.RAM, FileType.RM, FileType.MPG, FileType.MOV, FileType.ASF, FileType.MP4, FileType.FLV, FileType.MID };
 
		FileType[] tottents = { FileType.TORRENT };
 
		FileType[] audios = { FileType.WAV, FileType.MP3 };
 
		//FileType[] others = {};
 
		// 图片
		for (FileType fileType : pics) {
			if (fileType.equals(value)) {
				type = 1;
			}
		}
		// 文档
		for (FileType fileType : docs) {
			if (fileType.equals(value)) {
				type = 2;
			}
		}
		// 视频
		for (FileType fileType : videos) {
			if (fileType.equals(value)) {
				type = 3;
			}
		}
		// 种子
		for (FileType fileType : tottents) {
			if (fileType.equals(value)) {
				type = 4;
			}
		}
		// 音乐
		for (FileType fileType : audios) {
			if (fileType.equals(value)) {
				type = 5;
			}
		}
		return type;
	}
 
	
}

